package com.lmf.containerInitializer;

import com.lmf.bean.MyHandlesTypes;

import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.HandlesTypes;
import java.util.Set;

/**
 * 自定义一个Servlet初始化容器：必须实现ServletContainerInitializer类的onStartup()方法。
 *
 * @HandlesTypes(value = {MyHandlesTypes.class})作用：
 * Servlet容器在启动应用的时候，会将@HandlesTypes注解里面指定的类型下面的子类，包括实现类或者子接口等，全部给我们传递过来。
 */
@HandlesTypes(value = {MyHandlesTypes.class})
public class MyServletContainerInitializer implements ServletContainerInitializer {
    /*
     * 参数：
     *    ServletContext arg1：代表当前web应用。一个web应用就对应着一个ServletContext对象，此外，它也是我们常说的四大域对象之一，
     *    我们给它里面存个东西，只要应用在不关闭之前，我们都可以在任何位置获取到
     *
     *    Set<Class<?>> arg0：我们感兴趣的类型的所有后代类型
     *
     */
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        System.out.println("我们感兴趣的所有类型：");
        // 好，我们把这些类型来遍历一下
        for (Class<?> clz : set) {
            System.out.println(clz);
        }
    }
}
